package club.kittybunny.getjobsysbackend.controller;

import club.kittybunny.getjobsysbackend.entity.JobType;
import club.kittybunny.getjobsysbackend.service.JobTypeService;
import club.kittybunny.getjobsysbackend.vo.JobTypeEditVO;
import club.kittybunny.getjobsysbackend.vo.JobTypeVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: bunny
 * @Description: 我是兔子我会喵，我叫喵星兔
 */
@RestController
@RequestMapping(value = "/jobtype")
public class JobTypeController {
    @Autowired
    private JobTypeService jobTypeService;

    /**
     * 访问地址：http://127.0.0.1:8777/jobtype/findbyupper/0   0是参数
     *
     * 首页查询职位分类用，get方式调用
     *
     * @param upperid 父节点主键，如果是0说明没有父节点。传入0查询出最大分类，传入id查询这个id主分类下子分类
     * @return
     */
    @RequestMapping(value = "/findbyupper/{upperid}", method = RequestMethod.GET)
    public List<JobTypeVO> findJobTypeByUpper(@PathVariable("upperid") int upperid) {
        List<JobTypeVO> result = new ArrayList<JobTypeVO>();

        try {
            List<JobType> list = jobTypeService.findByUpperid(upperid, true);
            for (JobType type : list) {
                result.add(new JobTypeVO().create(type));
            }

        } catch (Exception e) {
            e.printStackTrace();
            result = new ArrayList<JobTypeVO>();
        }


        return result;
    }

    /**
     * 新增分类时使用，只支持post
     *
     * 测试命令（post方式） curl -d "name=测试&upperId=1" http://127.0.0.1:8777/jobtype/insert
     *
     * @param name    工作类型名字，非空
     * @param upperId 上级节点主键，空或者数据库不存在则判断为0
     * @return
     */
    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    public int insert(@RequestParam String name, Integer upperId) {
        int id = jobTypeService.insert(name, upperId, 1);
        return id;
    }

    /**
     * 访问地址：http://127.0.0.1:8777/jobtype/findbyid/1  1是参数主键
     *
     * 根据主键查询分类信息，用于修改等场景，get方式
     * 只要是数据库有的数据直接查询出来，不管是否生效
     *
     * @param id 主键，非空
     * @return
     */
    @RequestMapping(value = "/findbyid/{id}", method = RequestMethod.GET)
    public JobTypeEditVO findById(@PathVariable("id") int id) {
        JobTypeEditVO result = new JobTypeEditVO();
        JobType jobType = jobTypeService.findById(id);
        if (jobType == null) {
            return null;
        }
        result = new JobTypeEditVO().create(jobType);
        return result;
    }
    /**
     * 接口地址和测试命令（post方式） curl -d "id=2&name=1&status=1" http://127.0.0.1:8777/jobtype/update
     *
     * 修改分类时使用，只支持post，
     * 只能修改名字和是否生效，暂时设计为修改父节点要通过删除和增加实现，所以父节点id、菜单层级等无法修改。
     *
     *
     * @param id 主键，非空
     * @param name    工作类型名字，非空
     * @param status 是否生效，非空，1-生效，0-无效
     * @return 成功修改的数据条数，1-成功，0-失败
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public int update(@RequestParam Integer id,@RequestParam String name, @RequestParam String status) {
        JobType obj = new JobType();
        obj.setId(id);
        obj.setName(name);
        obj.setStatus(status);
        int result = jobTypeService.updateById(obj);
        return result;
    }
    /**
     * 访问地址： http://127.0.0.1:8777/jobtype/deleteById/1  1是主键参数
     *
     * 根据主键删除分类信息，get方式
     * 为真实删除，若想分类不生效或者隐藏应该修改类型状态为不生效（status=0）
     * 只能没有子分类或者没有相应职位的才可以删除，否则删除失败。
     * 如果像删除有子分类的可以考虑设置为无效状态。
     *
     * 是否有职位目前未完成，因为还没有职位表。
     *
     * @param id 主键，非空
     * @return 1-删除成功，0-删除失败。
     */
    @RequestMapping(value = "/deleteById/{id}", method = RequestMethod.GET)
    public int deleteById(@PathVariable("id") int id) {
        int result = jobTypeService.deleteById(id);
        return result;
    }

}
